#include "Mapa.h"
#include "Territorio.h"
#include <iostream>
using namespace std;

Mapa::Mapa()
{
}

unsigned int Mapa::getContinentesEnPoderDeJugador(string colorJugador) {
	unsigned int resultado = 0;
	for (map<string,Continente*>::iterator it = continentes.begin(); it != continentes.end(); it++)
			if (it->second->enPoderDeJugador(colorJugador))
				resultado++;
	return resultado;
}

unsigned int Mapa::getTerritoriosEnPoderDeJugador(string colorJugador) {
	unsigned int resultado = 0;
	for (map<string,Continente*>::iterator it = continentes.begin(); it != continentes.end(); it++)
			resultado += it->second->getCantidadDeTerritoriosEnPoderDeJugador(colorJugador);
	return resultado;
}

Territorio* Mapa::obtenerTerritorio(string nombre) {
	Territorio* aux = NULL;
	for (map<string,Continente*>::iterator it = continentes.begin(); it != continentes.end(); it++)
		if (it->second->getTerritorio(nombre) != NULL)
			aux = it->second->getTerritorio(nombre);
	return aux;
}

Continente* Mapa::obtenerContinente(string nombre) {
	if (continentes.count(nombre) == 1)
		return continentes[nombre];
	else
		return NULL;
}

void Mapa::agregarContinente(string nombre, int bonus) {
	continentes[nombre] = new Continente(nombre,bonus);
}

void Mapa::agregarContinente(string nombre) {
	continentes[nombre] = new Continente(nombre);
}

void Mapa::agregarTerritorio(string nombre, string continente) {
	Continente* aux = continentes[continente];
	aux->agregarTerritorio(new Territorio(nombre));
}

void Mapa::quitarContinente(std::string nombre) {
	continentes.erase(nombre);
}

bool Mapa::sonAdyacentes(Territorio* unTerritorio, Territorio* otroTerritorio) {
	return unTerritorio->obtenerTerritoriosAdyacentes()->count(otroTerritorio->getNombre());
}

bool Mapa::todosLosTerritoriosConEjercitos() {
	for (map<string,Continente*>::iterator it = continentes.begin(); it != continentes.end(); it++)
		if (!it->second->todosLosTerritoriosConEjercitos())
			return false;
	return true;
}

void Mapa::imprimirEstado() {
	cout<<"Estado del Mapa"<<endl<<endl;
	for (map<string,Continente*>::iterator it = continentes.begin(); it != continentes.end(); it++) {
		cout<<"Continente:"<<it->second->getNombre()<<endl;
		for (map<string,Territorio*>::iterator ite = it->second->getTerritorios()->begin(); ite != it->second->getTerritorios()->end(); ite++)
			cout<<"		Territorio:"<<ite->second->getNombre()<<" En poder de: "<<ite->second->getEnPoderDe()<<" Ejercitos: "<<ite->second->getCantidadDeEjercitos()<<endl;
		cout<<endl;
	}
	
}

Mapa::~Mapa()
{
}
